/** 卷积基础算法
 * 时域上的卷积等同于频域(FFT结果)的乘积
 * 所以时域滤波就是求 时域数据 与 要得到的信号的频域数据的IFFT结果 的卷积， 然后再进行频谱搬移*/
#include<unistd.h>
#include<stdio.h>
#include<string.h>
template<typename T>
void convolution(const T *inputs, const T *systems, int len, T *outputs)
{
	memset(outputs, 0, sizeof(T) * (2 * len - 1));
	for(int i = 0; i < len; i++)
	{
		for(int j = 0; j < len; j++)
		{
			outputs[i + j] += inputs[i] * systems[j];
		}
	}
}

int main()
{
	int inputs[3] = {1, 2, 3};
	int systems[3] = {4, 5, 6};
	int outputs[6];
	convolution<int>(inputs, systems, 3, outputs);
	for(int i = 0; i < 6; i++)
	{
		printf("%d ", outputs[i]);
	}
	puts("");
	return pause();
}
